#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char* hex_str_to_c_array(const char* hex_str) {
    // 创建可修改的字符串副本
    char* str_copy = strdup(hex_str);
    if (!str_copy) return NULL;

    // 计算最大可能的输出长度
    size_t max_len = strlen(hex_str) * 5 + 1; // 每个字节最多占5字符（"0xXX, "）
    char* result = malloc(max_len);
    if (!result) {
        free(str_copy);
        return NULL;
    }
    result[0] = '\0';

    // 分割字符串并处理每个token
    char* token = strtok(str_copy, " ");
    while (token != NULL) {
        // 转换为小写并验证长度
        if (strlen(token) != 2) {
            free(str_copy);
            free(result);
            return NULL;
        }

        // 构造新的格式
        char temp[6];
        snprintf(temp, sizeof(temp), "0x%02X%c", 
        (unsigned)strtol(token, NULL, 16),
        (strtok(NULL, " ") ? ',' : '\0'));

        strcat(result, temp);
        token = strtok(NULL, " ");
    }

    // 移除最后的逗号（如果有）
    size_t len = strlen(result);
    if (len > 0 && result[len-1] == ',') {
        result[len-1] = '\0';
    }

    free(str_copy);
    return result;
}

int main() {
    const char* hex_str = "AA 0B 27 00 00 00 00 00 00 00 02 81 01 00 60 2F ";


    char* formatted = hex_str_to_c_array(hex_str);
    if (!formatted) {
        printf("转换失败\n");
        return 1;
    }

    printf("转换结果：\n%s\n", formatted);
    free(formatted);
    
    return 0;
}
// gcc -o zhuanhua zhuanhua.c && zhuanhua.exe